↳ Prolog
↳ PrologToPiTRSProof
rotate_in_ga(X, Y) → U1_ga(X, Y, append2_in_aag(A, B, X))
append2_in_aag(.(X, Xs), Ys, .(X, Zs)) → U4_aag(X, Xs, Ys, Zs, append2_in_aag(Xs, Ys, Zs))
append2_in_aag([], Ys, Ys) → append2_out_aag([], Ys, Ys)
U4_aag(X, Xs, Ys, Zs, append2_out_aag(Xs, Ys, Zs)) → append2_out_aag(.(X, Xs), Ys, .(X, Zs))
U1_ga(X, Y, append2_out_aag(A, B, X)) → U2_ga(X, Y, append1_in_gga(B, A, Y))
append1_in_gga(.(X, Xs), Ys, .(X, Zs)) → U3_gga(X, Xs, Ys, Zs, append1_in_gga(Xs, Ys, Zs))
append1_in_gga([], Ys, Ys) → append1_out_gga([], Ys, Ys)
U3_gga(X, Xs, Ys, Zs, append1_out_gga(Xs, Ys, Zs)) → append1_out_gga(.(X, Xs), Ys, .(X, Zs))
U2_ga(X, Y, append1_out_gga(B, A, Y)) → rotate_out_ga(X, Y)
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
rotate_in_ga(X, Y) → U1_ga(X, Y, append2_in_aag(A, B, X))
append2_in_aag(.(X, Xs), Ys, .(X, Zs)) → U4_aag(X, Xs, Ys, Zs, append2_in_aag(Xs, Ys, Zs))
append2_in_aag([], Ys, Ys) → append2_out_aag([], Ys, Ys)
U4_aag(X, Xs, Ys, Zs, append2_out_aag(Xs, Ys, Zs)) → append2_out_aag(.(X, Xs), Ys, .(X, Zs))
U1_ga(X, Y, append2_out_aag(A, B, X)) → U2_ga(X, Y, append1_in_gga(B, A, Y))
append1_in_gga(.(X, Xs), Ys, .(X, Zs)) → U3_gga(X, Xs, Ys, Zs, append1_in_gga(Xs, Ys, Zs))
append1_in_gga([], Ys, Ys) → append1_out_gga([], Ys, Ys)
U3_gga(X, Xs, Ys, Zs, append1_out_gga(Xs, Ys, Zs)) → append1_out_gga(.(X, Xs), Ys, .(X, Zs))
U2_ga(X, Y, append1_out_gga(B, A, Y)) → rotate_out_ga(X, Y)
ROTATE_IN_GA(X, Y) → U1_GA(X, Y, append2_in_aag(A, B, X))
ROTATE_IN_GA(X, Y) → APPEND2_IN_AAG(A, B, X)
APPEND2_IN_AAG(.(X, Xs), Ys, .(X, Zs)) → U4_AAG(X, Xs, Ys, Zs, append2_in_aag(Xs, Ys, Zs))
APPEND2_IN_AAG(.(X, Xs), Ys, .(X, Zs)) → APPEND2_IN_AAG(Xs, Ys, Zs)
U1_GA(X, Y, append2_out_aag(A, B, X)) → U2_GA(X, Y, append1_in_gga(B, A, Y))
U1_GA(X, Y, append2_out_aag(A, B, X)) → APPEND1_IN_GGA(B, A, Y)
APPEND1_IN_GGA(.(X, Xs), Ys, .(X, Zs)) → U3_GGA(X, Xs, Ys, Zs, append1_in_gga(Xs, Ys, Zs))
APPEND1_IN_GGA(.(X, Xs), Ys, .(X, Zs)) → APPEND1_IN_GGA(Xs, Ys, Zs)
rotate_in_ga(X, Y) → U1_ga(X, Y, append2_in_aag(A, B, X))
append2_in_aag(.(X, Xs), Ys, .(X, Zs)) → U4_aag(X, Xs, Ys, Zs, append2_in_aag(Xs, Ys, Zs))
append2_in_aag([], Ys, Ys) → append2_out_aag([], Ys, Ys)
U4_aag(X, Xs, Ys, Zs, append2_out_aag(Xs, Ys, Zs)) → append2_out_aag(.(X, Xs), Ys, .(X, Zs))
U1_ga(X, Y, append2_out_aag(A, B, X)) → U2_ga(X, Y, append1_in_gga(B, A, Y))
append1_in_gga(.(X, Xs), Ys, .(X, Zs)) → U3_gga(X, Xs, Ys, Zs, append1_in_gga(Xs, Ys, Zs))
append1_in_gga([], Ys, Ys) → append1_out_gga([], Ys, Ys)
U3_gga(X, Xs, Ys, Zs, append1_out_gga(Xs, Ys, Zs)) → append1_out_gga(.(X, Xs), Ys, .(X, Zs))
U2_ga(X, Y, append1_out_gga(B, A, Y)) → rotate_out_ga(X, Y)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
ROTATE_IN_GA(X, Y) → U1_GA(X, Y, append2_in_aag(A, B, X))
ROTATE_IN_GA(X, Y) → APPEND2_IN_AAG(A, B, X)
APPEND2_IN_AAG(.(X, Xs), Ys, .(X, Zs)) → U4_AAG(X, Xs, Ys, Zs, append2_in_aag(Xs, Ys, Zs))
APPEND2_IN_AAG(.(X, Xs), Ys, .(X, Zs)) → APPEND2_IN_AAG(Xs, Ys, Zs)
U1_GA(X, Y, append2_out_aag(A, B, X)) → U2_GA(X, Y, append1_in_gga(B, A, Y))
U1_GA(X, Y, append2_out_aag(A, B, X)) → APPEND1_IN_GGA(B, A, Y)
APPEND1_IN_GGA(.(X, Xs), Ys, .(X, Zs)) → U3_GGA(X, Xs, Ys, Zs, append1_in_gga(Xs, Ys, Zs))
APPEND1_IN_GGA(.(X, Xs), Ys, .(X, Zs)) → APPEND1_IN_GGA(Xs, Ys, Zs)
rotate_in_ga(X, Y) → U1_ga(X, Y, append2_in_aag(A, B, X))
append2_in_aag(.(X, Xs), Ys, .(X, Zs)) → U4_aag(X, Xs, Ys, Zs, append2_in_aag(Xs, Ys, Zs))
append2_in_aag([], Ys, Ys) → append2_out_aag([], Ys, Ys)
U4_aag(X, Xs, Ys, Zs, append2_out_aag(Xs, Ys, Zs)) → append2_out_aag(.(X, Xs), Ys, .(X, Zs))
U1_ga(X, Y, append2_out_aag(A, B, X)) → U2_ga(X, Y, append1_in_gga(B, A, Y))
append1_in_gga(.(X, Xs), Ys, .(X, Zs)) → U3_gga(X, Xs, Ys, Zs, append1_in_gga(Xs, Ys, Zs))
append1_in_gga([], Ys, Ys) → append1_out_gga([], Ys, Ys)
U3_gga(X, Xs, Ys, Zs, append1_out_gga(Xs, Ys, Zs)) → append1_out_gga(.(X, Xs), Ys, .(X, Zs))
U2_ga(X, Y, append1_out_gga(B, A, Y)) → rotate_out_ga(X, Y)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
APPEND1_IN_GGA(.(X, Xs), Ys, .(X, Zs)) → APPEND1_IN_GGA(Xs, Ys, Zs)
rotate_in_ga(X, Y) → U1_ga(X, Y, append2_in_aag(A, B, X))
append2_in_aag(.(X, Xs), Ys, .(X, Zs)) → U4_aag(X, Xs, Ys, Zs, append2_in_aag(Xs, Ys, Zs))
append2_in_aag([], Ys, Ys) → append2_out_aag([], Ys, Ys)
U4_aag(X, Xs, Ys, Zs, append2_out_aag(Xs, Ys, Zs)) → append2_out_aag(.(X, Xs), Ys, .(X, Zs))
U1_ga(X, Y, append2_out_aag(A, B, X)) → U2_ga(X, Y, append1_in_gga(B, A, Y))
append1_in_gga(.(X, Xs), Ys, .(X, Zs)) → U3_gga(X, Xs, Ys, Zs, append1_in_gga(Xs, Ys, Zs))
append1_in_gga([], Ys, Ys) → append1_out_gga([], Ys, Ys)
U3_gga(X, Xs, Ys, Zs, append1_out_gga(Xs, Ys, Zs)) → append1_out_gga(.(X, Xs), Ys, .(X, Zs))
U2_ga(X, Y, append1_out_gga(B, A, Y)) → rotate_out_ga(X, Y)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
APPEND1_IN_GGA(.(X, Xs), Ys, .(X, Zs)) → APPEND1_IN_GGA(Xs, Ys, Zs)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPSizeChangeProof
↳ PiDP
APPEND1_IN_GGA(.(X, Xs), Ys) → APPEND1_IN_GGA(Xs, Ys)
From the DPs we obtained the following set of size-change graphs:
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
APPEND2_IN_AAG(.(X, Xs), Ys, .(X, Zs)) → APPEND2_IN_AAG(Xs, Ys, Zs)
rotate_in_ga(X, Y) → U1_ga(X, Y, append2_in_aag(A, B, X))
append2_in_aag(.(X, Xs), Ys, .(X, Zs)) → U4_aag(X, Xs, Ys, Zs, append2_in_aag(Xs, Ys, Zs))
append2_in_aag([], Ys, Ys) → append2_out_aag([], Ys, Ys)
U4_aag(X, Xs, Ys, Zs, append2_out_aag(Xs, Ys, Zs)) → append2_out_aag(.(X, Xs), Ys, .(X, Zs))
U1_ga(X, Y, append2_out_aag(A, B, X)) → U2_ga(X, Y, append1_in_gga(B, A, Y))
append1_in_gga(.(X, Xs), Ys, .(X, Zs)) → U3_gga(X, Xs, Ys, Zs, append1_in_gga(Xs, Ys, Zs))
append1_in_gga([], Ys, Ys) → append1_out_gga([], Ys, Ys)
U3_gga(X, Xs, Ys, Zs, append1_out_gga(Xs, Ys, Zs)) → append1_out_gga(.(X, Xs), Ys, .(X, Zs))
U2_ga(X, Y, append1_out_gga(B, A, Y)) → rotate_out_ga(X, Y)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
APPEND2_IN_AAG(.(X, Xs), Ys, .(X, Zs)) → APPEND2_IN_AAG(Xs, Ys, Zs)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPSizeChangeProof
APPEND2_IN_AAG(.(X, Zs)) → APPEND2_IN_AAG(Zs)
From the DPs we obtained the following set of size-change graphs: